package com.example.jedis.redis;

import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Set;

public class RedisSetCommand {
    Jedis jedis = null;
    public RedisSetCommand(Jedis jedis){
        this.jedis = jedis;
    }

    /**
      SADD key member [member ...]

     将一个或多个 member 元素加入到集合 key 当中，已经存在于集合的 member 元素将被忽略。

     假如 key 不存在，则创建一个只包含 member 元素作成员的集合。

     当 key 不是集合类型时，返回一个错误。

     在Redis2.4版本以前， SADD 只接受单个 member 值。
     可用版本：
     >= 1.0.0
     时间复杂度:
     O(N)， N 是被添加的元素的数量。
     返回值:
     被添加到集合中的新元素的数量，不包括被忽略的元素。
     * @param setName
     * @param value
     * @return
     */
    public Long sadd(String setName,String value){
       return  this.jedis.sadd(setName,value);
    }

    /**
     SCARD key

     返回集合 key 的基数(集合中元素的数量)。

     可用版本：
     >= 1.0.0
     时间复杂度:
     O(1)
     返回值：
     集合的基数。
     当 key 不存在时，返回 0 。
     * @param setName
     * @return
     */
    public Long scard(String setName){
        return this.jedis.scard(setName);
    }

    /**
     SDIFF key [key ...]

     第一个集合与其它集合的差集。。

     不存在的 key 被视为空集。

     可用版本：
     >= 1.0.0
     时间复杂度:
     O(N)， N 是所有给定集合的成员数量之和。
     返回值:
      第一个集合与其它集合的差集。

     * @param setNames
     * @return
     */
    public Set<String> sdiff(String ... setNames){
        return this.jedis.sdiff(setNames);
    }


    /**
     SMEMBERS key

     返回集合 key 中的所有成员。

     不存在的 key 被视为空集合。

     可用版本：
     >= 1.0.0
     时间复杂度:
     O(N)， N 为集合的基数。
     返回值:
     集合中的所有成员。

     * @param setName
     * @return
     */
    public Set<String> smembers(String setName){
        return this.jedis.smembers(setName);
    }

    /**
     SISMEMBER key member

     判断 member 元素是否集合 key 的成员。

     可用版本：
     >= 1.0.0
     时间复杂度:
     O(1)
     返回值:
     如果 member 元素是集合的成员，返回 1 。
     如果 member 元素不是集合的成员，或 key 不存在，返回 0 。
     * @param setName
     * @param value
     * @return
     */
    public Boolean sismemeber(String setName,String value){
        return this.jedis.sismember(setName,value);
    }

    /**
     SPOP key

     移除并返回集合中的一个随机元素。

     如果只想获取一个随机元素，但不想该元素从集合中被移除的话，可以使用 SRANDMEMBER 命令。

     可用版本：
     >= 1.0.0
     时间复杂度:
     O(1)
     返回值:
     被移除的随机元素。
     当 key 不存在或 key 是空集时，返回 nil 。
     *
     * @param setName
     * @return
     */
    public String spop(String setName){
        return this.jedis.spop(setName);
    }

    /**
     *
     移除集合 key 中的一个或多个 member 元素，不存在的 member 元素会被忽略。

     当 key 不是集合类型，返回一个错误。

     在 Redis 2.4 版本以前， SREM 只接受单个 member 值。
     可用版本：
     >= 1.0.0
     时间复杂度:
     O(N)， N 为给定 member 元素的数量。
     返回值:
     被成功移除的元素的数量，不包括被忽略的元素。
     * @param setName
     * @param value
     * @return
     */
    public Long srem(String setName,String value){
        return this.jedis.srem(setName,value);
    }
}
